﻿//========================================================
//
//  DESCRIPTION:  Cls_DS_CHUCNANG.cs
//
//  CREATED:	Huypvt, 07/02/2006
//
//  USED FOR:	Quản lý danh sách chức năng 
//
//=================================================

using System;
using System.Data;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;

namespace QLNHK.BLL {
	//Name: Cls_DS_CHUCNANG	Base class:	Cls_DS_CHUCNANG
	//Author: 	Huypvt		Date: 07/02/2006
	//Modifier:	Hungtq		Date: 08/02/2006
	//Thay đổi gì ?
	//Thêm các phương thức cần thiết:
	//	- ListByAll(): Liệt kê danh sách các chức năng
	//		Return: DataSet	
	/// <summary>
	/// Quản lý danh sách chức năng
	/// </summary>
	public class Cls_DS_CHUCNANG
	{
		#region Variable Members
		private const string ST_DS_CHUCNANG_SELECTALL = "st_DS_CHUCNANGSelectAll"; // Tên StoreProcedure
		private const string ST_DS_CHUCNANG_SELECT = "st_DS_CHUCNANGSelect"; // Tên StoreProcedure
		private const string ST_DS_CHUCNANG_INSERT = "st_DS_CHUCNANGInsert"; // Tên StoreProcedure
		private const string ST_DS_CHUCNANG_UPDATE = "st_DS_CHUCNANGUpdate"; // Tên StoreProcedure
		private const string ST_DS_CHUCNANG_DELETE = "st_DS_CHUCNANGDelete"; // Tên StoreProcedure
        private const string ST_DS_CHUCNANG_ISEXISTS = "st_DS_CHUCNANG_IsExists"; // Tên StoreProcedure
		private const string TABLE_NAME = "tb_DS_CHUCNANG"; //Tên bảng dữ liệu trong CSDL
		private Database db; //Thực thi cập nhật, thêm  mới, xóa dữ liệu trên CSDL
		private string _iD_Goc; //Id của chức năng
		private string _ten; //Key của chức năng
		private string _ten_HienThi;// Tên chức năng
		private int _cap_HienThi;//Cấp hiển thị chức năng trong Menu 
		#endregion //Variable Members

		#region Properties
		public string ID_Goc
		{
			get{return this._iD_Goc;}
			set{this._iD_Goc = value;}
		}
		public string Ten
		{
			get{return this._ten;}
			set{this._ten = value;}
		}
		public string Ten_HienThi
		{
			get{return this._ten_HienThi;}
			set{this._ten_HienThi = value;}
		}
		public int Cap_HienThi
		{
			get{return this._cap_HienThi;}
			set{this._cap_HienThi = value;}
		}
		#endregion //Properties

		#region Constructors
		public Cls_DS_CHUCNANG()
		{
			try
			{
                db = DatabaseFactory.CreateDatabase("MSSQL");
			}
			catch(Exception ex)
			{
				throw ex;
			}
		}

		public Cls_DS_CHUCNANG(string intIDGoc, string strTen, string strTenHienThi, int strCapHienThi)
		{
			this._iD_Goc = intIDGoc;
			this._ten = strTen;
			this._ten_HienThi = strTenHienThi;
			this._cap_HienThi = strCapHienThi;
		}
		#endregion //Constructors

		#region Methods
		private DbCommand InsertWrapper()
		{
			DbCommand dbCommand = db.GetStoredProcCommand(Cls_DS_CHUCNANG.ST_DS_CHUCNANG_INSERT);
			db.AddInParameter(dbCommand,"@ID_Goc", DbType.Int32,"ID_Goc", DataRowVersion.Current);
			db.AddInParameter(dbCommand,"@Ten", DbType.String,"Ten", DataRowVersion.Current);
			db.AddInParameter(dbCommand,"@Ten_HienThi", DbType.String,"Ten_HienThi", DataRowVersion.Current);
			db.AddInParameter(dbCommand,"@Cap_HienThi", DbType.Int32,"Cap_HienThi", DataRowVersion.Current);
			return dbCommand;
		}

		private DbCommand UpdateWrapper()
		{
			DbCommand dbCommand = db.GetStoredProcCommand(Cls_DS_CHUCNANG.ST_DS_CHUCNANG_UPDATE);
			db.AddInParameter(dbCommand,"@ID_DS_ChucNang", DbType.Int32, "ID_DS_ChucNang", DataRowVersion.Current);
			db.AddInParameter(dbCommand,"@ID_Goc", DbType.Int32, "ID_Goc", DataRowVersion.Current);
			db.AddInParameter(dbCommand,"@Ten", DbType.String, "Ten", DataRowVersion.Current);
			db.AddInParameter(dbCommand,"@Ten_HienThi", DbType.String, "Ten_HienThi", DataRowVersion.Current);
			db.AddInParameter(dbCommand,"@Cap_HienThi", DbType.Int32, "Cap_HienThi", DataRowVersion.Current);
			return dbCommand;
		}

		private DbCommand DeleteWrapper()
		{
			DbCommand dbCommand = db.GetStoredProcCommand(Cls_DS_CHUCNANG.ST_DS_CHUCNANG_DELETE);
			db.AddInParameter(dbCommand,"@ID_DS_ChucNang", DbType.Int32, "ID_DS_ChucNang", DataRowVersion.Current);
			return dbCommand;
		}

		//Author: Huypvt	Date: 07/02/2006
		//Modifier:		Date: 
		// Thay đổi gì	 ?
		/// <summary>
		/// Cập nhật thông tin thay đổi vào CSDL
		/// </summary>
		/// <param name="ds">DataSet có thông tin thay đổi</param>
		/// <returns>int</returns>
		public int DoUpdate(DataSet ds)
		{
			try
			{
				int result = db.UpdateDataSet(ds,Cls_DS_CHUCNANG.TABLE_NAME,this.InsertWrapper(),this.UpdateWrapper(),this.DeleteWrapper(),UpdateBehavior.Standard);
				return result;
			}
			catch(Exception ex)
			{
				throw ex;
			}
		}
		//Author: Hungtq	Date: 08/02/2006
		//Modifier:		Date:
		// Thay đổi gì	 ?
		/// <summary>
		/// Liệt kê thông tin danh sách các chức năng
		/// </summary>
		/// <returns>DataSet</returns>
		public DataSet ListByAll()
		{
			try
			{
				DataSet dsDSChucNang = new DataSet();
				DbCommand dbCommand = db.GetStoredProcCommand(Cls_DS_CHUCNANG.ST_DS_CHUCNANG_SELECTALL);
				db.LoadDataSet(dbCommand,dsDSChucNang,Cls_DS_CHUCNANG.TABLE_NAME);
				return dsDSChucNang;
			}
			catch
			{
				return null;
			}
		}
		public Cls_DS_CHUCNANG ListByID_DS_ChucNang(int intIDDanhSachChucNang)
		{
			try
			{
				Cls_DS_CHUCNANG ObjDSChucNang = new Cls_DS_CHUCNANG();
				DataSet dsDSChucNang = new DataSet();
				DbCommand dbCommand = db.GetStoredProcCommand(Cls_DS_CHUCNANG.ST_DS_CHUCNANG_SELECT);
				db.AddInParameter(dbCommand,"@ID_DS_ChucNang",DbType.Int32,intIDDanhSachChucNang);
				db.LoadDataSet(dbCommand,dsDSChucNang,Cls_DS_CHUCNANG.TABLE_NAME);
				ObjDSChucNang._iD_Goc = dsDSChucNang.Tables[0].Rows[0]["ID_Goc"].ToString();
				ObjDSChucNang._ten = dsDSChucNang.Tables[0].Rows[0]["Ten"].ToString();
				ObjDSChucNang._ten_HienThi = dsDSChucNang.Tables[0].Rows[0]["Ten_HienThi"].ToString();
				ObjDSChucNang._cap_HienThi = Convert.ToInt32(dsDSChucNang.Tables[0].Rows[0]["Cap_HienThi"]);
				return ObjDSChucNang;
			}
			catch
			{
				return null;
			}
		}
		/// <summary>
		/// Insert một chức năng vào CSDL
		/// </summary>
		/// <param name="strID_Goc"></param>
		/// <param name="strTen"></param>
		/// <param name="strTen_HienThi"></param>
		/// <param name="strCapHienThi"></param>
		/// <returns></returns>
		public int Insert(string strID_Goc, string strTen, string strTen_HienThi, int strCapHienThi)
		{
			DbCommand dbCommand = db.GetStoredProcCommand(Cls_DS_CHUCNANG.ST_DS_CHUCNANG_INSERT);
			db.AddInParameter(dbCommand,"@ID_Goc", DbType.String,strID_Goc);
			db.AddInParameter(dbCommand,"@Ten", DbType.String,strTen);
			db.AddInParameter(dbCommand,"@Ten_HienThi", DbType.String,strTen_HienThi);
			db.AddInParameter(dbCommand,"@Cap_HienThi", DbType.Int32,strCapHienThi);
			return Convert.ToInt32(db.ExecuteScalar(dbCommand));		
		}

        /// <summary>
        /// Kiểm tra tên chức năng có tồn tại trong CSDL
        /// </summary>
        /// <param name="strTen"></param>
        /// <returns></returns>
        public bool IsExists(string strTen)
        {
            DbCommand dbCommand = db.GetStoredProcCommand(Cls_DS_CHUCNANG.ST_DS_CHUCNANG_ISEXISTS);
            db.AddInParameter(dbCommand, "@Ten", DbType.String, strTen);
            return Convert.ToInt32(db.ExecuteScalar(dbCommand)) > 0;
        }

        public int UpdateByTen(string strID_Goc, string strTen, string strTen_HienThi, int strCapHienThi)
        {
            try
            {
                DbCommand dbCommand = db.GetStoredProcCommand("st_DS_CHUCNANGUpdate_ByTen");
                db.AddInParameter(dbCommand, "@ID_Goc", DbType.String, strID_Goc);
                db.AddInParameter(dbCommand, "@Ten", DbType.String, strTen);
                db.AddInParameter(dbCommand, "@Ten_HienThi", DbType.String, strTen_HienThi);
                db.AddInParameter(dbCommand, "@Cap_HienThi", DbType.Int32, strCapHienThi);

                return Convert.ToInt32(db.ExecuteScalar(dbCommand));
            }
            catch (Exception ex) { Logger.LocalLogger.Instance().WriteMessage(ex); }

            return 0;
        }

		#endregion //Methods
	}

}
